
Anh Tuan
Data Science Expert

Tự động hóa web đòi hỏi các công cụ vừa mạnh mẽ vừa dễ sử dụng. Tuy nhiên, các trang web hiện đại triển khai các biện pháp chống bot và CAPTCHA phức tạp có thể làm dừng các script tự động hóa.
Sự kết hợp giữa Helium và CapSolver cung cấp một giải pháp tinh tế:
Kết hợp hai công cụ này cho phép tự động hóa web liền mạch, tự động xử lý các thách thức CAPTCHA.
Hướng dẫn này sẽ giúp bạn đạt được ba mục tiêu cốt lõi:
Helium là một thư viện Python giúp sử dụng Selenium dễ dàng hơn. Nó cung cấp giao diện cấp cao cho phép bạn viết tự động hóa trình duyệt bằng tiếng Anh thuần túy.
click("Submit") thay vì các selector XPath phức tạpwrite("Xin chào", vào="Tìm kiếm")# Cài đặt Helium
pip install helium
# Cài đặt thư viện requests cho API CapSolver
pip install requests
from helium import *
# Khởi động trình duyệt và điều hướng
start_chrome("https://wikipedia.org")
# Gõ vào ô tìm kiếm
write("Lập trình Python", vào=S("input[name='search']"))
# Nhấn nút tìm kiếm
click(Button("Tìm kiếm"))
# Kiểm tra xem văn bản có tồn tại không
if Text("Python").exists():
print("Đã tìm thấy bài viết về Python!")
# Đóng trình duyệt
kill_browser()
CapSolver là dịch vụ giải CAPTCHA tự động dựa trên AI hỗ trợ nhiều loại CAPTCHA. Nó cung cấp API đơn giản cho phép bạn gửi các thách thức CAPTCHA và nhận kết quả trong vài giây.
Gợi ý: Sử dụng mã
HELIUMkhi đăng ký để nhận thêm tín dụng!
https://api.capsolver.comhttps://api-stable.capsolver.comTrước khi kết hợp Helium với CapSolver, tự động hóa web gặp phải nhiều thách thức:
| Thách thức | Tác động |
|---|---|
| Thách thức CAPTCHA | Yêu cầu giải thủ công, làm gián đoạn tự động hóa |
| Các selector phức tạp | Selenium yêu cầu các XPath/CSS dài dòng |
| Vấn đề thời gian | Các phần tử chưa sẵn sàng khi truy cập |
| Tính dễ đọc của mã | Các script tự động hóa trở nên khó bảo trì |
Sự tích hợp Helium + CapSolver giải quyết những thách thức này với mã sạch sẽ, dễ đọc.
Phương pháp tích hợp API cung cấp kiểm soát toàn diện quá trình giải CAPTCHA và hoạt động với mọi loại CAPTCHA.
pip install helium requests
import time
import requests
from helium import *
CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"
def tạo_nhiệm_vụ(nhiệm_vụ: dict) -> str:
"""Tạo nhiệm vụ giải CAPTCHA và trả về ID nhiệm vụ."""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": nhiệm_vụ
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Lỗi CapSolver: {result.get('errorDescription')}")
return result["taskId"]
def nhận_kết_quả_nhiệm_vụ(task_id: str, số_lần_thử_tối_đa: int = 120) -> dict:
"""Kiểm tra kết quả nhiệm vụ cho đến khi giải được hoặc hết thời gian."""
for _ in range(số_lần_thử_tối_đa):
response = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
)
result = response.json()
if result.get("status") == "ready":
return result["solution"]
elif result.get("status") == "failed":
raise Exception(f"Nhiệm vụ thất bại: {result.get('errorDescription')}")
time.sleep(1)
raise TimeoutError("Giải CAPTCHA hết thời gian")
def giải_captcha(nhiệm_vụ: dict) -> dict:
"""Hoàn tất quy trình giải CAPTCHA."""
task_id = tạo_nhiệm_vụ(nhiệm_vụ)
return nhận_kết_quả_nhiệm_vụ(task_id)
Bạn cũng có thể sử dụng tiện ích mở rộng CapSolver với Helium để phát hiện và giải CAPTCHA tự động.
config.js của tiện ích:// Trong thư mục tiện ích, chỉnh sửa: assets/config.js
var defined = {
apiKey: "KHÓA_API_CAPSOLVER_CỦA_BẠN", // Thay bằng khóa API thực tế của bạn
enabledForBlacklistControl: false,
blackUrlList: [],
enabledForRecaptcha: true,
enabledForRecaptchaV3: true,
enabledForTurnstile: true,
// ... các cài đặt khác
}
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_argument('--load-extension=/đường_dẫn/tới/tiện_ích_capsolver')
start_chrome(options=options)
# Tiện ích sẽ tự động phát hiện và giải CAPTCHA
Lưu ý: Tiện ích phải có khóa API hợp lệ trước khi có thể giải CAPTCHA tự động.
Ví dụ này giải reCAPTCHA v2 trên trang demo của Google với phát hiện khóa trang tự động:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"
def giải_recaptcha_v2(khóa_trang: str, trang_url: str) -> str:
"""Giải reCAPTCHA v2 và trả về token."""
# Tạo nhiệm vụ
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV2TaskProxyLess",
"websiteURL": trang_url,
"websiteKey": khóa_trang,
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Lỗi: {result.get('errorDescription')}")
task_id = result["taskId"]
print(f"Nhiệm vụ được tạo: {task_id}")
# Kiểm tra kết quả
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
elif result.get("status") == "failed":
raise Exception(f"Thất bại: {result.get('errorDescription')}")
print(" Đang chờ kết quả...")
time.sleep(1)
def main():
url_mục_tiêu = "https://www.google.com/recaptcha/api2/demo"
# Cấu hình trình duyệt với chống phát hiện
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
print("Khởi động trình duyệt...")
start_chrome(url_mục_tiêu, options=options)
driver = get_driver()
try:
time.sleep(2)
# Phát hiện khóa trang tự động từ trang
phần_tử_recaptcha = driver.find_element("css selector", ".g-recaptcha")
khóa_trang = phần_tử_recaptcha.get_attribute("data-sitekey")
print(f"Phát hiện khóa trang: {khóa_trang}")
# Giải CAPTCHA
print("\nGiải reCAPTCHA v2 bằng CapSolver...")
token = giải_recaptcha_v2(khóa_trang, url_mục_tiêu)
print(f"Nhận được token: {token[:50]}...")
# Chèn token
print("\nChèn token...")
driver.execute_script(f'''
var responseField = document.getElementById('g-recaptcha-response');
responseField.style.display = 'block';
responseField.value = '{token}';
''')
print("Token đã được chèn!")
# Gửi biểu mẫu bằng cú pháp đơn giản của Helium
print("\nGửi biểu mẫu...")
click("Gửi")
time.sleep(3)
# Kiểm tra thành công
if "Verification Success" in driver.page_source:
print("\n=== THÀNH CÔNG! ===")
print("reCAPTCHA đã được giải và biểu mẫu đã được gửi!")
finally:
kill_browser()
if __name__ == "__main__":
main()
Thử nghiệm tự mình:
python demo_recaptcha_v2.py
Cloudflare Turnstile là một trong những thách thức CAPTCHA phổ biến nhất. Dưới đây là cách giải nó:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"
def giải_turnstile(khóa_trang: str, trang_url: str) -> str:
"""Giải Cloudflare Turnstile và trả về token."""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "AntiTurnstileTaskProxyLess",
"websiteURL": trang_url,
"websiteKey": khóa_trang,
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Lỗi: {result.get('errorDescription')}")
task_id = result["taskId"]
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["token"]
elif result.get("status") == "failed":
raise Exception(f"Thất bại: {result.get('errorDescription')}")
time.sleep(1)
def main():
url_mục_tiêu = "https://trang_mục_tiêu_của_bạn.com"
khóa_turnstile = "0x4XXXXXXXXXXXXXXXXX" # Tìm trong nguồn trang
# Cấu hình trình duyệt
options = ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')
start_chrome(url_mục_tiêu, options=options)
driver = get_driver()
try:
# Chờ Turnstile tải
time.sleep(3)
# Giải CAPTCHA
print("Giải Turnstile...")
token = giải_turnstile(khóa_turnstile, url_mục_tiêu)
print(f"Nhận được token: {token[:50]}...")
# Chèn token
driver.execute_script(f'''
document.querySelector('input[name="cf-turnstile-response"]').value = "{token}";
// Kích hoạt callback nếu có
const callback = document.querySelector('[data-callback]');
if (callback) {{
const callbackName = callback.getAttribute('data-callback');
if (window[callbackName]) {{
window[callbackName]('{token}');
}}
}}
''')
# Gửi biểu mẫu bằng Helium
if Button("Gửi").exists():
click("Gửi")
print("Turnstile đã bị vượt qua!")
finally:
kill_browser()
if __name__ == "__main__":
main()
reCAPTCHA v3 dựa trên điểm số và không yêu cầu tương tác người dùng:
import time
import requests
from helium import *
from selenium.webdriver import ChromeOptions
CAPSOLVER_API_KEY = "KHÓA_API_CỦA_BẠN"
CAPSOLVER_API = "https://api.capsolver.com"
def giải_recaptcha_v3(
khóa_trang: str,
trang_url: str,
hành_động: str = "verify",
điểm_số_tối_thiểu: float = 0.7
) -> str:
"""Giải reCAPTCHA v3 với hành động và điểm số tối thiểu được chỉ định."""
response = requests.post(
f"{CAPSOLVER_API}/createTask",
json={
"clientKey": CAPSOLVER_API_KEY,
"task": {
"type": "ReCaptchaV3TaskProxyLess",
"websiteURL": trang_url,
"websiteKey": khóa_trang,
"pageAction": hành_động,
"minScore": điểm_số_tối_thiểu
}
}
)
result = response.json()
if result.get("errorId") != 0:
raise Exception(f"Lỗi: {result.get('errorDescription')}")
task_id = result["taskId"]
while True:
result = requests.post(
f"{CAPSOLVER_API}/getTaskResult",
json={
"clientKey": CAPSOLVER_API_KEY,
"taskId": task_id
}
).json()
if result.get("status") == "ready":
return result["solution"]["gRecaptchaResponse"]
elif result.get("status") == "failed":
raise Exception(f"Thất bại: {result.get('errorDescription')}")
time.sleep(1)
def main():
url_mục_tiêu = "https://trang_mục_tiêu_của_bạn.com"
khóa_recaptcha_v3 = "6LcXXXXXXXXXXXXXXXXXXXXXXXXX"
# Cài đặt trình duyệt không đầu
options = ChromeOptions()
options.add_argument('--headless')
start_chrome(url_mục_tiêu, options=options)
driver = get_driver()
try:
# Giải reCAPTCHA v3 với hành động "đăng nhập"
print("Giải reCAPTCHA v3...")
token = giải_recaptcha_v3(
khóa_recaptcha_v3,
url_mục_tiêu,
hành_động="đăng nhập",
điểm_số_tối_thiểu=0.9
)
# Chèn token
driver.execute_script(f'''
var responseField = document.querySelector('[name="g-recaptcha-response"]');
if (responseField) {{
responseField.value = '{token}';
}}
// Gọi callback nếu tồn tại
if (typeof onRecaptchaSuccess === 'function') {{
onRecaptchaSuccess('{token}');
}}
''')
print("Bypass reCAPTCHA v3 thành công!")
finally:
kill_browser()
if name == "main":
main()
## 7. Các phương pháp tốt nhất
### 7.1. Cấu hình trình duyệt
Cấu hình Chrome để trông giống trình duyệt bình thường hơn:
```python
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--window-size=1920,1080')
start_chrome(options=options)
Sử dụng cú pháp đơn giản của Helium cho các thao tác chính, nhưng truy cập Selenium khi cần:
from helium import *
start_chrome("https://target-site.com")
# Sử dụng Helium cho tương tác đơn giản
write("username", into="Email")
write("password", into="Password")
# Truy cập driver Selenium cho thao tác phức tạp
driver = get_driver()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight)")
# Quay lại Helium
click("Login")
Tránh kích hoạt giới hạn tốc độ bằng cách thêm độ trễ ngẫu nhiên:
import random
import time
def human_delay(min_sec=1.0, max_sec=3.0):
"""Độ trễ ngẫu nhiên để mô phỏng hành vi con người."""
time.sleep(random.uniform(min_sec, max_sec))
# Sử dụng giữa các thao tác
click("Next")
human_delay()
write("data", into="Input")
Luôn triển khai xử lý lỗi phù hợp cho việc giải CAPTCHA:
def solve_with_retry(task_payload: dict, max_retries: int = 3) -> dict:
"""Giải CAPTCHA với logic thử lại."""
for attempt in range(max_retries):
try:
return solve_captcha(task_payload)
except TimeoutError:
if attempt < max_retries - 1:
print(f"Đã hết thời gian, thử lại... ({attempt + 1}/{max_retries})")
time.sleep(5)
else:
raise
except Exception as e:
if "balance" in str(e).lower():
raise # Không thử lại lỗi số dư
if attempt < max_retries - 1:
time.sleep(2)
else:
raise
Sử dụng chế độ không đầu cho tự động hóa nền:
from helium import *
from selenium.webdriver import ChromeOptions
options = ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
start_chrome("https://target-site.com", options=options)
| Thao tác | Selenium | Helium |
|---|---|---|
| Nhấp vào nút | driver.find_element(By.XPATH, "//button[text()='Submit']").click() |
click("Submit") |
| Gõ văn bản | driver.find_element(By.NAME, "email").send_keys("test@test.com") |
write("test@test.com", into="Email") |
| Nhấn Enter | element.send_keys(Keys.ENTER) |
press(ENTER) |
| Kiểm tra văn bản tồn tại | "Welcome" in driver.page_source |
Text("Welcome").exists() |
Việc tích hợp Helium và CapSolver tạo ra bộ công cụ tuyệt vời cho tự động hóa web:
Dù bạn đang xây dựng công cụ thu thập dữ liệu, hệ thống kiểm thử tự động hay các luồng thu thập dữ liệu, sự kết hợp này cung cấp sự đơn giản và sức mạnh.
Lợi ích bổ sung: Sử dụng mã
HELIUMkhi đăng ký tại CapSolver để nhận thêm tín dụng!
Helium giúp Selenium dễ sử dụng hơn:
CapSolver hỗ trợ tất cả các loại CAPTCHA chính. Cloudflare Turnstile và reCAPTCHA v2/v3 có tỷ lệ thành công cao nhất. Tích hợp hoạt động liền mạch với bất kỳ CAPTCHA nào mà CapSolver hỗ trợ.
Có! Helium hỗ trợ chế độ không đầu thông qua ChromeOptions. Đối với reCAPTCHA v3 và CAPTCHA dựa trên token, chế độ không đầu hoạt động hoàn hảo. Đối với CAPTCHA v2 hiển thị, chế độ có đầu có thể mang lại kết quả tốt hơn.
Kiểm tra mã nguồn trang cho:
data-sitekey hoặc các phần tử cf-turnstiledata-sitekey trên phần tử g-recaptchaCác giải pháp phổ biến:
Có! Gọi get_driver() để truy cập WebDriver Selenium nền tảng cho bất kỳ thao tác nào mà Helium không hỗ trợ trực tiếp.
Học kiến trúc gỡ mã web Rust có thể mở rộng với reqwest, scraper, gỡ mã bất đồng bộ, gỡ mã trình duyệt không đầu, xoay proxy và xử lý CAPTCHA tuân thủ.

Tự động hóa việc giải CAPTCHA với Nanobot và CapSolver. Sử dụng Playwright để giải reCAPTCHA và Cloudflare tự động.
